/**
 * 复制文本
 * @param textToCopy
 * @returns {Promise<unknown>}
 */
export function copyToClipboard(textToCopy) {
  // navigator clipboard 需要https等安全上下文
  if (navigator.clipboard && window.isSecureContext) {
    // navigator clipboard 向剪贴板写文本
    navigator.clipboard.writeText(textToCopy)
    ElNotification({
      message: '复制成功',
      type: 'success'
    })
  } else {
    // 创建text area
    let textArea = document.createElement('textarea')
    textArea.value = textToCopy
    // 使text area不在viewport，同时设置不可见
    textArea.style.position = 'absolute'
    textArea.style.opacity = 0
    textArea.style.left = '-999999px'
    textArea.style.top = '-999999px'
    document.body.appendChild(textArea)
    textArea.focus()
    textArea.select()
    return new Promise((res, rej) => {
      // 执行复制命令并移除文本框
      document.execCommand('copy') ? res() : rej()
      ElNotification({
        message: '复制成功',
        type: 'success'
      })
      textArea.remove()
    })
  }
}

function downloadFile(hrefUrl, fileName) {
  const a = document.createElement('a')
  a.setAttribute('href', hrefUrl)
  a.setAttribute('download', fileName)
  a.setAttribute('target', '_blank')
  const clickEvent = document.createEvent('MouseEvents')
  clickEvent.initEvent('click', true, true)
  a.dispatchEvent(clickEvent)
}
function dataURLtoBlob(base64Str, mimeTypeStr) {
  const bstr = atob(base64Str)
  let n = bstr.length
  const u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new Blob([u8arr], {
    type: mimeTypeStr
  })
}

/**
 * 下载文件
 * @param base64Str 文件的 base64 编码
 * @param mimeTypeStr 编码格式，如 UTF-8
 * @param fileName 文件名
 */
export function downloadFileByBase64(base64Str, mimeTypeStr, fileName) {
  const myBlob = dataURLtoBlob(base64Str, mimeTypeStr)
  const myUrl = URL.createObjectURL(myBlob)
  downloadFile(myUrl, fileName)
}

/**
 * 将带数组的文本，添加上可点击的按钮
 * @param inputString
 * @returns {string}
 */
export function extractAndWrapJsonArray(inputString) {
  try {
    // 使用正则表达式尝试找到输入字符串中的JSON数组
    const jsonArrayRegex = /\[[^\[\]]*\]/g; // 匹配任何在方括号[]之间的内容，但不包括嵌套的方括号
    let match;
    let output = inputString; // 初始化输出为原始输入，如果没有找到匹配项则直接返回

    while ((match = jsonArrayRegex.exec(inputString)) !== null) {
      // 尝试将匹配到的字符串解析为JSON数组
      const jsonArray = JSON.parse(match[0].replace(/'/g, '"')); // 替换单引号为双引号以符合JSON规范

      // 如果成功解析为数组，则替换原始文本中的数组为带有<a>标签的数组元素
      if (Array.isArray(jsonArray)) {
        const wrappedElements = jsonArray.map(element => `<button style='font-size: 1em; color: #eac015' class='text-link'>${element}</button>, `).join('');
        output = output.replace(match[0], wrappedElements);
      }
    }

    return output;
  } catch (error) {
    console.error("处理过程中遇到错误", error);
    return inputString; // 如果有错误，返回原始输入
  }
}

/**
 * 判断变量是否是空，或者空数组
 * @param variable
 * @returns {boolean}
 */
export function isEmptyOrEmptyArray(variable) {
  return variable === null || variable === undefined || (Array.isArray(variable) && variable.length === 0);
}
